/cody/pratham0709/Striver-A-TO-Z-SDE-SHEET/Binary%20Search/BS%20on%201D%20Arrays/First%20and%20Last%20Position%20of%20an%20Element%20In%20Sorted%20Array(CN).cpp
#include <bits/stdc++.h> 

int firstOcc(vector<int>& arr, int n, int k){
    int start = 0;
    int end = n-1;
    
    int mid = start + (end - start)/2;
    int ans = -1;
    while(start<=end){
        if (arr[mid]==k){
            ans = mid;
            end = mid -1;    
        }
        else if(k > arr[mid]){
            start = mid + 1;
        }
        else{
            end = mid -1;
        }
        mid = start + (end - start)/2;
    }
    return ans;
}
int lastOcc(vector<int>& arr, int n, int k){
    int start = 0;
    int end = n-1;
    
    int mid = start + (end - start)/2;
    int ans = -1;
    while(start<=end){
        if (arr[mid]==k){
            ans = mid;
            start = mid + 1;    
        }
        else if(k > arr[mid]){
            start = mid + 1;
        }
        else{
            end = mid -1;
        }
        mid = start + (end - start)/2;
    }
    return ans;
}
pair<int, int> firstAndLastPosition(vector<int>& arr, int n, int k)
{
    // Write your code here
    pair<int,int> p;
    p.first =  firstOcc(arr,  n, k);
    p.second = lastOcc(arr, n, k);
    
    return p;
}